package demo.annotation;

import org.springframework.core.annotation.AliasFor;

// 2、用于元注解属性的显性别名
@ContextConfiguration
public @interface MyTestConfig1 {

	/**
	 *如果被@AliasFor注释的属性指向的是它所在注解之外的其他注解，
	 * 那么这个属性被解释成元注解属性的别名。(称之为显性的元注解属性重写)
	 * 我们可以通过重写继承一个或多个其他注解的功能从而
	 * 使得可以更细粒度精准地控制注解层级中属性的重写,
	 * 不像Java中继承必须继承父类的所有功能。
	 * 实际上，使用@AliasFor甚至可以为元注解的value属性声明别名.
	 * 如下所示：@MyTestConfig下的xmlFiles指向的是一个元注解@ContextConfiguration的属性
	 *
	 * 实现要求:
	 * 1 如果一个属性是一个元注解属性的别名,那么这个属性必须用@AliasFor进行注释并且
	 * 该属性必须指向元注解属性。
	 * 2 别名化的属性必须声明相同的返回结果
	 * 3.@AliasFor的annotation属性必须引用元注解
	 * 4.被引用的元注解必须放置在声明了@AliasFor的注解类上
	 *
	 * 作者：chzne
	 * 链接：https://www.jianshu.com/p/d6bba708100d
	 * 来源：简书
	 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
	 */

	@AliasFor(annotation = ContextConfiguration.class, attribute = "locations")
	String[] xmlFiles();
}
